package languageObject.metatModel;

import java.util.ArrayList;
import java.util.List;

import partager.TypeSousElement;
import partager.TypeSousElementVar;
import utils.Utils;

/**
 * permet de donner des informations sur le sous element d'une classe
 */
public class SousElementObject 
{
	private TypeSousElement type;
	private String nom;
	private TypeSousElementVar typeOutput;
	private List<SousElementObject> typeInput;
	
	/**
	 * Constructeur par defaut
	 */
	public SousElementObject() 
	{
		this.type = null;
		this.nom = null;
		this.typeOutput = null;
		this.typeInput = null;
	}
	
	/**
	 * Constructeur par recopie
	 */
	public SousElementObject(TypeSousElement type, String nom, TypeSousElementVar typeOutput, List<SousElementObject> typeInput) 
	{
		this.type = type;
		this.nom = nom;
		this.typeOutput = typeOutput;
		this.typeInput = typeInput;
	}

	/**
	 * getter and setteur
	 */
	public TypeSousElement getType(){return type;}
	public void setType(TypeSousElement type){this.type = type;}

	public String getNom(){return nom;}
	public void setNom(String nom){this.nom = nom;}

	public TypeSousElementVar getTypeOutput(){return typeOutput;}
	public void setTypeOutput(TypeSousElementVar typeOutput){this.typeOutput = typeOutput;}
	
	public List<SousElementObject> getTypeInput(){return typeInput;}
	public void setTypeInput(List<SousElementObject> typeInput){this.typeInput = typeInput;}
	public void addTypeInput(SousElementObject typeInput)
	{
		if(this.typeInput == null) this.typeInput = new ArrayList<SousElementObject>();
		this.typeInput.add(typeInput);
	}
	
	/**
	 * methode Object
	 */
	public boolean equals(Object o)
	{
		if(o == null) return false;
		
		if(o instanceof SousElementObject)
		{
			SousElementObject objet = (SousElementObject) o;
			
			if(!Utils.equals(this.getType(), objet.getType())) return false;
			if(!Utils.equals(this.getNom(), objet.getNom())) return false;
			if(!Utils.equals(this.getTypeOutput(), objet.getTypeOutput())) return false;
			if(!Utils.equalsList(this.getTypeInput(), objet.getTypeInput())) return false;
			
			return true;
		}
		return false;
	}
}
